<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<!-- InstanceBegin template="/Templates/soramimi.dwt" codeOutsideHTMLIsLocked="true" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style/style.css" type="text/css" />
<!-- #BeginEditable "doctitle" -->
<title>How to build the Guitar</title>
<link rel="stylesheet" href="style/style.css">
<!-- #EndEditable -->
</head>
<body bgcolor="#f0f0f0" background="style/bg.gif">
<div id="body">
<div id="header">
  <div style="float: left"><a href="https://soramimi.github.io/Guitar/"><img src="banner.png" width="443" height="48" alt="Guitar - the graphical git client"></a></div>
  <div style="text-align: right;">under development</div>
  <div style="clear: both;"></div>
</div>
<!-- #BeginEditable "content" -->
<h1>Guitarをビルドする</h1>
<ul>
  <li><a href="build-en.html">How to build the Guitar (en) (draft)</a></li>
</ul>
<p>開発言語はC++、GUIフレームワークは Qt 5 を使用しています。</p>
<p>最初にコンパイラを準備します。</p>
<h4>Windows</h4>
<ul>
  <li>Microsoft Visual C++ 2013 以降
    <ul>
      <li>無料のExpress版も使用可能です。その場合、「for Windows Desktop」と書かれているものをインストールします。</li>
    </ul>
  </li>
</ul>
<h4>macOS</h4>
<ul>
  <li>Xcode</li>
</ul>
<h4>Linux</h4>
<ul>
  <li>GCC</li>
</ul>
<p><a href="https://www.qt.io/download-open-source/#section-2">Qtのダウンロードサイト</a>からお使いのOSに合ったQt SDKをダウンロードし、インストールします。</p>
<h2>とりあえず</h2>
<p>Qtが初めての方の向けに、基本的な使い方を紹介します。Windows、macOS、Linuxのいずれでもほとんど同じです。Qt使用経験のある方は、この節は読み飛ばして結構です。</p>
<p>Qt Creator を起動します。</p>
<p><a href="qtcreator.png"><img src="qtcreator.png" width="540" height="342"></a></p>
<p>[新しいプロジェクト] ボタンを押し、 [Qt ウィジェットアプリケーション] を選択します。</p>
<p><a href="newproject.png"><img src="newproject.png" width="448" height="279" border="0"></a></p>
<p>[名前]の欄に“Test”、[パス]には、作業用フォルダの場所を入力します。</p>
<p><a href="qtwidgetapp.png"><img src="qtwidgetapp.png" width="467" height="234"></a></p>
<p>筆者の場合、都合により、複数のキットを使い分けていますが、初めての場合は、一つだけ表示されていると思います。使用するキットのチェックボックスをONにして、右上の [詳細] をクリックします。 [プロファイル] は必要ないので、チェックボックスをOFFにします。（ONのままでも実害はないので、そのままでもいいです）</p>
<p><a href="selectkit.png"><img src="selectkit.png" width="468" height="247"></a></p>
<p>生成されるクラス名を確認します。ここの設定はそのままで、次へ進みます。</p>
<p><a href="classinfo.png"><img src="classinfo.png" width="468" height="234"></a></p>
<p>プロジェクト作成の最終確認です。問題なければ [完了] ボタンを押します。</p>
<p><a href="final.png"><img src="final.png" width="468" height="234"></a></p>
<p>左下の三角ボタンを押すと、ビルドが開始し、成功したらプログラムが実行されます。</p>
<p><a href="firstapp.png"><img src="firstapp.png" width="541" height="342"></a></p>
<p>最初のアプリケーションが完成しました。</p>
<p><img src="blankapp.png" width="416" height="338"></p>
<h2>環境設定</h2>
<p>Qt Creator の設定を行います。[ツール] → [オプション] を選択すると、オプションダイアログが開きます。</p>
<p><a href="projectsettings1.png"><img src="projectsettings1.png" width="522" height="353"></a></p>
<p>デフォルト設定では、ファイル名は「lowercase」な名前になりますが、Guitarでは「UpperCamelCase」なファイル名を採用していますので、[ファイル名を小文字にする] というチェックボックスをOFFにします。</p>
<p><a href="projectsettings2.png"><img src="projectsettings2.png" width="522" height="353"></a></p>
<p>[ビルドと実行] の [一般] タブにある、 [既定のビルドディレクトリ] の設定を変更します。</p>
<p>Windowsの場合“../_build_%{CurrentProject:Name}”にします。これはグローバルの設定なので、変えたくない場合は、後でプロジェクトの設定で“../_build_Guitar”などにします。</p>
<p><a href="projectsettings3.png"><img src="projectsettings3.png" width="522" height="353"></a></p>
<p>LinuxやmacOSの場合、ビルドディレクトリは 「../_build_%{CurrentProject:Name}_%{CurrentBuild:Name}」がおすすめです。そのような設定にすると /home/<em>&lt;username&gt;</em>/develop/_build_Guitar_Release|Debug の様になります。</p>
<p><img src="projectsettings4.png" width="605" height="376"></p>
<p>一応、次のようなコーディングスタイルを採用しています。</p>
<ul>
  <li> ハードタブ（半角4文字幅推奨）</li>
</ul>
<p>上に挙げたのは、グローバルの共通設定ですが、プロジェクト毎にも設定箇所があります。</p>
<p><img src="projectsettings5.png" width="540" height="342"></p>
<p>[エディタ]の設定、[コードスタイル]の設定を確認します。</p>
<h2>ソースコードを取得する</h2>
<p>作業用フォルダを作成します。各自好みの場所で構いません。筆者の場合、Windowsでは C:\develop 、Linuxでは /home/soramimi/develop としています。</p>
<h3>Guitar</h3>
<p><img src="github.png" width="20" height="16" alt="guthub"><a href="https://github.com/soramimi/Guitar">https://github.com/soramimi/Guitar</a> にアクセスします。</p>
<p><img src="repo.png" width="995" height="168" class="border"></p>
<p>右にある[Clone or download]を押すと、ソースコードを取得するためのアドレスが表示されます。</p>
<p>HTTPSを使用する場合</p>
<pre>C:\develop&gt;git clone https://github.com/soramimi/Guitar.git
</pre>
<p>SSHを使用する場合</p>
<pre>C:\develop&gt;git clone git@github.com:soramimi/Guitar.git
</pre>
<p>クローンしたフォルダに 2個のプロジェクトファイル（*.pro）があるのを確認しておきます。</p>
<p><img src="openproject.png" width="800" height="512"></p>
<h2>依存ライブラリ</h2>
<h3>zlib</h3>
<p>圧縮されたファイルの伸張処理でzlibを使用します。Qtアプリからzlibを利用するためには以下のような方法があります。</p>
<ul>
  <li>Qt SDK に同梱されているzlib</li>
  <li>OSにインストールされているzlib</li>
  <li>公式配布されているzlib</li>
  <li>GitHubで公開されているzlib</li>
</ul>
<p>どのzlibを利用するかによって、Guitarのクローンフォルダにあるmyzlib.hを書き換えます。</p>
<h4>Qt SDK に同梱されているzlib</h4>
<p>一応、最も推奨されている（ことになっているらしい）方法ですが、うまくいかない事例が報告されています。</p>
<pre>#include &lt;QtZlib/zlib.h&gt;</pre>
<p>Qt SDKのインストールのしかたによって QtZlib/zlib.h があったりなかったりします。ファイルが見つからないなどのエラーが出る場合は別の方法を試してみます。</p>
<h4>OSにインストールされているzlib</h4>
<p>Linuxなどでは、ほぼ間違いなくzlibはインストールされています。ただし、開発用パッケージは入っていないかもしれません。Debian系では、以下のようにしてインストールします。</p>
<pre>$ sudo apt-get install zlib1g-dev</pre>
<p>ヘッダファイルは次のようにします。</p>
<pre>#include &lt;zlib.h&gt;</pre>
<p>この方法では、Guitarのプロジェクトファイル（Guitar.pro）で、明示的に libz.so をリンクするように指定する必要があります。</p>
<pre>unix:LIBS += -lz</pre>
<h4>公式配布されているzlib</h4>
<p>ヘッダファイルは次のようになります。</p>
<pre>#include &quot;../zlib-1.2.11/zlib.h&quot;</pre>
<p>ライブラリを自前ビルドする必要があり、面倒なので、この方法はおすすめしません。</p>
<h4>GitHubで公開されているzlib</h4>
<p>zlibをクローンします。</p>
<pre>C:\develop&gt;git clone https://github.com/madler/zlib.git </pre>
<p>Guitarとzlibを同じ階層に配置します。</p>
<ul class="foldertree">
  <li class="folder">C:\develop
    <ul>
      <li class="folder">Guitar</li>
      <li class="folder">zlib </li>
    </ul>
  </li>
</ul>
<p>Guitarをクローンしたフォルダに zlib.pro がありますので、これを Qt Creator で開きます。そして、[デバッグ]版と[リリース]版をビルドします。</p>
<p>zlibは（特にUnix系の場合）OSにインストール済みのはずなので、zlibの自前ビルドは明らかに無駄なのですが、この方法が file not found などのエラーが発生しにくいので、マルチプラットフォームの移植性の観点から、一応この手順をGuitarにおける推奨ということにしています。</p>
<h3>OpenSSL</h3>
<p>ウェブサイトにhttpsでアクセスするため、ソケットとOpenSSLを使用しています。</p>
<h4>Windows</h4>
<p><a href="https://www.openssl.org/source/">https://www.openssl.org/source/</a> からOpenSSLをダウンロードします。1.1系には対応していません。1.0系の最新版を使用してください。本稿執筆時点（2017-03-09）での最新版は <a href="https://www.openssl.org/source/openssl-1.0.2k.tar.gz">openssl-1.0.2k.tar.gz</a> です。ビルド方法は INSTALL.W32 を参照してください。GuitarではOpenSSLが C:\openssl にインストールされている想定でプロジェクトファイルを記述していますので、ビルド前のConfigureスクリプトの実行で、インストール先を指定する必要があります。OpenSSLのビルドにはperlが必要です。ない場合は <a href="http://www.activestate.com/activeperl">ActivePerl</a> などをインストールします。</p>
<pre>&gt; perl Configure VC-WIN32 --prefix=c:\openssl</pre>
<p>もし他の場所にインストールした場合、Guitar.proを修正する必要があります。</p>
<pre>win32:INCLUDEPATH += C:\openssl\include
win32:LIBS += -LC:\openssl\lib </pre>
<p>ビルドが完了したOpenSSLの中で、必要なファイルは libeay32.dll と ssleay32.dll です。 C:\openssl\bin にあります。あとで Guitar のビルドが完了したら、ビルド先フォルダにこれらのファイルをコピーする必要があります。</p>
<h4>Linux</h4>
<p>Debian系のLinuxの場合 libssl-dev をインストールしておきます。</p>
<pre>$ sudo apt-get install libssl-dev </pre>
<blockquote>
  <p>※他のLinuxでのインストール方法は確認していません。各自お調べください</p>
</blockquote>
<p>リンカのオプションに -lssl -lcrypto が必要です。（Guitar.proにはそのように記述しています）</p>
<h4>macOS</h4>
<p>最近のmacOSでは標準でOpenSSLが入らなくなったようです。共有ライブラリの読み込みパス解決の問題への対応が面倒なので、自前ビルドしてスタティックリンクしています。1.1系は未対応なので、1.0系の最新版をチェックアウトします。</p>
<pre>$ git clone https://github.com/openssl/openssl.git
$ cd openssl
$ git checkout -b OpenSSL_1_0_2-stable origin/OpenSSL_1_0_2-stable
$ ./Configure darwin64-x86_64-cc --prefix=/usr/local
$ make -j4
$ sudo make install</pre>
<h2>ビルドの準備</h2>
<h4>prepare.rb</h4>
<p>バージョン情報やリソーススクリプトを自動生成するための prepare.rb というスクリプトファイルがあります。Qt Creator でプログラム本体をビルドする前に、このスクリプトを実行しておく必要があります。実行にはRubyが必要です。</p>
<pre>C:\develop\Guitar&gt;ruby prepare.rb</pre>
<p>以下のファイルが作成されます。</p>
<ul>
  <li>version.c … バージョン情報ダイアログボックスで表示する値を定義します</li>
  <li>win.rc … Windows用アプリのリソースを定義します</li>
  <li>Info.plist … macOS用アプリの共通設定を定義します</li>
</ul>
<h2>プロジェクトを開く</h2>
<p>Qt Creator の「ようこそ」の画面で、右上の[プロジェクトを開く]ボタンを押します。</p>
<p>クローンした場所に、 Guitar.pro があります。 </p>
<h3>Guitarのビルド</h3>
<p>Guitar.pro を開き、 Qt Creator の左にある三角ボタンを押すか、Ctrl+R（実行）を押すと、ビルドと実行が行われます。ビルドだけして、実行したくない場合は、Ctrl+Bを押します。デバッガ上で実行するには、デバッグ開始ボタンかF5キーを押します。</p>
<h4>Windowsの場合</h4>
<p>OpenSSLの libeay32.dll と ssleay32.dll を、Guitar.exe と同じフォルダにコピーしておく必要があります。これを忘れた場合 Guitar.exe が実行できずに即座に終了します。</p>
<h4>失敗する場合</h4>
<p>よくあるのが、prepare.rbを実行し忘れて、 version.c が見つからないというエラーです。前述した「ビルドの準備」の操作を行うと version.c が作成されます。自動では行われないので、手作業でやる必要があります。</p>
<h4>追加したソースがコンパイルされないとき</h4>
<p>version.c を生成した場合もそうですが、リポジトリから pull したら新しいファイルが追加されていたときや、新しいクラス（のファイル）を追加したとき、そのままビルドすると、増えたファイルがコンパイルされずに、いろいろ見つからないというエラーが出ることがあります。そんなときは、Qt Creator の [ビルド]→[qmake の実行] を行ってください。追加したファイルがビルドされない問題は、大抵これで解消されます。</p>
<p><img src="qmake.png" alt="qmakeの実行" width="365" height="152" class="border"></p>
<!-- #EndEditable -->
<div id="footer"> <span id="copyright"></span> </div>
</body>
<script type="text/javascript" src="common.js"></script>
<!-- InstanceEnd -->
</html>
